package com.gwc.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/*                               发生时间             发生次数
* 1、实例化               构造器    第一次请求/服务启动    1
* 2、初始化               init     构造完毕             1
* 3、接受请求，处理请求服务  service   每次请求            多次
* 4、销毁                destory   关闭服务            1
* servlet在Tomcat中是单例的
* Servlet的成员变量在多个线程栈(理解为多个请求)之中是共享的
* 不建议在service方法中修改成员变量，在并发请求时，会引发线程安全问题
*
* defalut-servlet: Tomcat服务器中默认的service，当请求静态资源时，最终请求会达到该类中的service中，
*                  由其去寻找并读取静态资源文字，返回给浏览器
*
* */

// loadOnStartup代表该类初始的顺序,默认值为-1,代表当由请求到来时再初始化,
// 当为正数时，代表Tomcat启动时进行初始化,且值越小，初始化的顺序越靠前，该值可以存在相同值
@WebServlet(urlPatterns = {"/servletLifeCycle"},loadOnStartup = -1)
public class ServletLifeCycle extends HttpServlet {

    public ServletLifeCycle(){
        System.out.println("这是构造器");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("这是初始化");
    }

//    @Override
//    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        System.out.println("服务中");
//    }

    // 会在父类中的service方法中调用该方法，可以平替掉本类中的service
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这是doGet！！！");
    }

    @Override
    public void destroy() {
        System.out.println("销毁对象");
    }
}
